import axios from 'axios';

const isDevelopment = import.meta.env.MODE === 'development'; // 是否为开发环境
const host = isDevelopment ? '' : 'http://baobab.kaiyanapp.com'; // API基础地址（开发环境使用代理，生产环境使用官方API）

// 创建 axios 实例
const request = axios.create({
  baseURL: host,
  timeout: 10000, // 请求超时时间（ms）
});

// 响应拦截器
request.interceptors.response.use(
  (response) => response.data,
  (error) => {
    console.error('API 请求失败:', error);
    return Promise.reject(error);
  }
);

// 获取首页精选内容
export const getSelected = () => {
  return request.get('/api/v4/tabs/selected');
};

// 获取社区推荐内容
export const getCommunityRecommend = () => {
  return request.get('/api/v7/community/tab/rec');
};

// 获取热门内容
export const getHot = () => {
  return request.get('/api/v4/discovery/hot');
};

// 获取关注内容
export const getFollow = () => {
  return request.get('/api/v4/tabs/follow');
};

// 获取排行榜视频列表
// strategy: 排行榜策略 (weekly-周排行/monthly-月排行/historical-总排行)
export const getRankList = (strategy: 'weekly' | 'monthly' | 'historical' = 'weekly') => {
  return request.get('/api/v4/rankList/videos', {
    params: { strategy }
  });
};

// 获取周排行榜
export const getRankListWeekly = () => {
  return request.get('/api/v4/rankList/videos', {
    params: { strategy: 'weekly' }
  });
};

// 获取视频详情
// videoId: 视频ID
export const getVideoDetail = (videoId: string | number) => {
  return request.get(`/api/v2/video/${videoId}`);
};

// 获取相关视频推荐
// videoId: 视频ID
export const getRelatedVideos = (videoId: string | number) => {
  return request.get('/api/v4/video/related', {
    params: { id: videoId }
  });
};

// 获取视频评论列表
// videoId: 视频ID
export const getVideoReplies = (videoId: string | number) => {
  return request.get('/api/v2/replies/video', {
    params: { videoId }
  });
};

// 使用完整 URL 获取数据：用于分页加载，支持 nextPageUrl
// fullUrl: 完整的 API URL（例如：http://baobab.kaiyanapp.com/api/v2/replies/video?videoId=123&page=2）
export const getByFullUrl = (fullUrl: string) => {
  // 开发环境下，将完整 URL 转换为相对路径，走 Vite 代理
  if (isDevelopment) {
    if (fullUrl.startsWith('http://') || fullUrl.startsWith('https://')) {
      try {
        const urlObj = new URL(fullUrl);
        const pathWithQuery = urlObj.pathname + urlObj.search; // 提取路径和查询参数
        return request.get(pathWithQuery); // 使用代理请求
      } catch (e) {
        // 如果 URL 解析失败，尝试直接提取路径
        const pathMatch = fullUrl.match(/https?:\/\/[^/]+(\/.+)/);
        if (pathMatch && pathMatch[1]) {
          return request.get(pathMatch[1]);
        }
        return request.get(fullUrl);
      }
    }
    // 已经是相对路径，直接使用
    return request.get(fullUrl);
  }

  // 生产环境：如果是完整URL，创建一个新的 axios 实例来避免使用 baseURL
  if (fullUrl.startsWith('http://') || fullUrl.startsWith('https://')) {
    const fullUrlRequest = axios.create({
      timeout: 10000,
    });
    fullUrlRequest.interceptors.response.use(
      (response) => response.data,
      (error) => {
        console.error('API 请求失败:', error);
        return Promise.reject(error);
      }
    );
    return fullUrlRequest.get(fullUrl);
  }
  return request.get(fullUrl);
};

export default {
  getSelected,
  getCommunityRecommend,
  getHot,
  getFollow,
  getRankList,
  getRankListWeekly,
  getVideoDetail,
  getRelatedVideos,
  getVideoReplies,
  getByFullUrl,
};
